package com.foreveross.proxyip.infra.utils.param;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.foreveross.proxyip.infra.utils.NumberUtils;
import com.foreveross.proxyip.infra.utils.StringUtils;
/**
 * 获得浮点类型参数值
 * @author xiangsf
 * @version $Revision$ $Date$
 * @since 0.5
 */
public class ParamFloatUtils {
	/**
     * 获得页面请求中的浮点值
     * <p>如果获得的值为空，则返回null</p>
     * @param request
     * @param name 参数名称
     * @return 
     */
    public static Float getParameter(HttpServletRequest request, String name){
    	Float value = null;
    	String temp = request.getParameter(name);
    	if(StringUtils.isNotEmpty(temp) && NumberUtils.isNumber(temp)){
    		value = Float.valueOf(temp);
    	}
    	temp = null;
    	return value;
    }    
    /**
     * 获得页面请求中的浮点值
     * <p>如果获得的值为空时，则返回传入的defaultValue值</p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认返回值
     * @return 
     */
    public static Float getParameter(HttpServletRequest request, String name, Float defaultValue){
    	Float value = defaultValue;
    	String temp = request.getParameter(name);
    	if(StringUtils.isNotEmpty(temp) && NumberUtils.isNumber(temp)){
    		value = Float.valueOf(temp);
    	}
    	temp = null;
    	return value;
    }
    /**
     * 获得页面请求中的浮点值
     * <p>如果获得的值为空时，则返回传入的defaultValue值</p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认返回值
     * @return 值为false、off、0时返回false, 否则返回true
     */
    public static Float getParameter(Map<String, String> params, String name, Float defaultValue){
    	Float value = defaultValue;
    	String temp = params.get(name);
    	if(StringUtils.isNotEmpty(temp) && NumberUtils.isNumber(temp)){
    		value = Float.valueOf(temp);
    	}
    	temp = null;
    	return value;
    }
    /**
     * 获得页面请求中的浮点值集合
     * <p>
     * 如果没有该参数值对象，将返回一个长度为0的浮点型数组；
     * 当获得的值为空时，则该值为传入的defaultValue值
     * </p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认值
     * @return 返回浮点数组
     */
    public static Float[] getParameters(HttpServletRequest request, String name, Float defaultValue){
    	List<Float> values = getListParameters(request,name, defaultValue) ;
    	return (Float[])values.toArray(new Float[]{});
    }
    /**
     * 获得页面请求中的浮点值集合
     * <p>
     * 如果没有该参数值对象，将返回一个长度为0的浮点型list集合；
     * 当获得的值为空时，则该值为传入的defaultValue值
     * </p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认值
     * @return 返回浮点型list集合
     */
    public static List<Float> getListParameters(HttpServletRequest request, String name, Float defaultValue){
    	List<Float> values = new ArrayList<Float>();
    	String[] temp = request.getParameterValues(name);
    	if(temp != null && temp.length > 0){
    		for(int i = 0 ;i < temp.length; i++){
    			if(StringUtils.isNotEmpty(temp[i]) && NumberUtils.isNumber(temp[i])){
    				values.add(Float.valueOf(temp[i]));
    	    	}else{
    	    		values.add(defaultValue);
    	    	}
    		}
    	}
    	temp = null;
    	return values;
    }
    /**
     * 获得页面请求中的浮点值集合
     * <p>
     * 如果没有该参数值对象，将返回一个长度为0的浮点型数组；
     * 当获得的值为空时，则该值为传入的defaultValue值
     * </p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认值
     * @return 返回浮点数组
     */
    public static Float[] getParametersStartWith(HttpServletRequest request, String namePrefix, Float defaultValue){
    	List<Float> values = getListParametersStartWith(request, namePrefix, defaultValue);
    	return (Float[])values.toArray(new Float[]{});
    }
    /**
     * 获得页面请求中的浮点值集合
     * <p>
     * 如果没有该参数值对象，将返回一个长度为0的浮点型list集合；
     * 当获得的值为空时，则该值为传入的defaultValue值
     * </p>
     * @param request
     * @param name 参数名称
     * @param defaultValue 默认值
     * @return 返回浮点list集合
     */
    public static List<Float> getListParametersStartWith(HttpServletRequest request, String namePrefix, Float defaultValue){
    	List<Float> values = new ArrayList<Float>();
    	Map<String,String[]> paras = request.getParameterMap();
    	String tempKey = null;
    	String temp = null;
    	for(Iterator<String> names = paras.keySet().iterator(); names.hasNext();){
    		tempKey = names.next();
    		if(tempKey.startsWith(namePrefix)){//以指定的字符串开头
    			if(paras.get(tempKey) != null && paras.get(tempKey).length > 0){
	    			temp = (paras.get(tempKey))[0];
	    			if(StringUtils.isNotEmpty(temp) && NumberUtils.isNumber(temp)){
	    				values.add(Float.valueOf(temp));
	    	    	}else{
	    	    		values.add(defaultValue);
	    	    	}
    			}else{
    				values.add(defaultValue);
    			}
    		}
    	}
    	tempKey = null;
    	temp = null;
    	return values;
    }
}
